/**
 * 发送ajax的函数
 * @param {1} obj 参数
 *      obj.url         表示请求的路径，必选项
 *      obj.type        表示请求方式，可选项，默认是get
 *      obj.async       表示是否异步，可选项，默认是异步
 *      obj.data        请求携带的数据(请求体),可选项，没有默认值
 *      obj.dataType    请求希望返回的数据类型，可选项，默认为json
 *      obj.success     请求成功是执行的函数
 *      obj.error       请求失败时执行的函数
 */

function setAjax(obj) {
    //处理是否传入了想要的类型
    if (!obj.dataType) {
        obj.dataType = "json";
    }
    //如果传入了，需要判断类型
    if (obj.dataType != "json" && obj.dataType != "string") {
        throw new Error("数据类型参数错误，只接受json或string");
    }
    //判断是否传入了url
    if (!obj.url) {
        throw new Error("请求的url不能为空");
    }
    //如果传入了url - 判断是不是字符串
    if (Object.prototype.toString.call(obj.url) != '[object String]') {
        throw new Error("请求的url不是一个正确的url");
    }
    //是否传入了请求方式
    if (!obj.type) {
        obj.type = "get";
    }
    //传入了请求方式
    if (obj.type != "get" && obj.type != "post") {
        throw new Error("请求方式必须为post或get");
    }
    //判断数据是否有传
    if (obj.data) {
        if (Object.prototype.toString.call(obj.data) == '[object String]' && obj.data.indexOf("=") != -1) {
            obj.data = obj.data;
        } else if (Object.prototype.toString.call(obj.data) == '[object Object]') {
            var data = '';
            var f = '';
            for (var attr in obj.data) {
                data += f + attr + "=" + obj.data[attr];
                f = "&";
            }
            obj.data = data;
        } else {
            throw new Error("传入的数据类型不正确，只接受字符串或对象");
        }
    }
    //判断请求方式是get的话，需要将数据拼接在url后面
    if (obj.url == "get") {
        obj.url += "?" + obj.data;
    }
    //先判断是否传了
    if (obj.async == undefined) {
        obj.async = true;
    }
    if (Object.prototype.toString.call(obj.async) != '[object Boolean]') {
        throw new Error("是否异步的参数必须是布尔值");
    }
    if (!obj.success) {
        obj.success = function() {

        }
    }
    if (!obj.error) {
        obj.error = function() {

        }
    }
    //创建兼容ajax对象
    var xhr;
    try {
        xhr = new XMLHttpRequest()
    } catch (e) {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xhr.open(obj.type, obj.url, obj.async);
    xhr.onreadystatechange = function() {
        if (xhr.readyState === 4) {
            if (xhr.status >= 200 && xhr.status < 300) {
                res = xhr.responseText;
                if (obj.dataType === "json") {
                    res = JSON.parse(res);
                }
                obj.success(res);
            } else {
                obj.error();

            }
        }
    }
    if (obj.type === "post") {
        xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
        if (obj.data) {
            xhr.send(obj.data);
            return;
        }
    }
    xhr.send();
}
// setAjax({
//     type: "post",
//     url: "one.php",
//     data: {
//         name: "zs",
//         age: 18
//     },
//     dataType: "json",
//     success: function(res) {
//         console.log(res);
//     }
// })